<?php
namespace Peas\Utils;

/**
 * Peas Framework
 *
 * 字符串操作工具类
 *
 * @author  Hongzan Zhang <zhanghongzan@163.com>
 * @version $Id$
 */
class StringUtils
{
    /**
     * 生成随机字符串，包含大小写字母和数字，或者指定可以包含的字符
     *
     * @param  int    $length 字符串长度
     * @param  string $chars  指定字典，不设置则使用默认的大小写字母和数字，指定了则仅限定到指定的字典
     * @return string
     */
    public static function random($length, $chars = null)
    {
        if ($chars === null) {
            $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        }
        $result = '';
        $maxNum = strlen($chars) - 1;
        for ($i = 0; $i < $length; $i ++) {
            $result .= $chars{mt_rand(0, $maxNum)};
        }
        return $result;
    }

    /**
     * 生成随机字符串，仅包含大小写字母和数字且不包含易混淆的O、o、l、I、0、1
     *
     * @param  int $length 字符串长度
     * @return string
     */
    public static function randomSimple($length)
    {
        return self::random($length, 'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789');
    }

    /**
     * 生成随机字符串，包含特殊字符：取ASCII码的33～126范围内的字符
     *
     * @param  int $length 字符串长度
     * @return string
     */
    public static function randomSpecial($length)
    {
        $result = '';
        for ($i = 0; $i < $length; $i ++) {
            $result .= chr(mt_rand(33, 126));
        }
        return $result;
    }


    /**
     * 字符串从头开始截取
     *
     * @param  string $str
     * @param  string $length   截取长度
     * @param  string $tailStr  如果未截取到字符串末尾，在末尾额外添加的字符串，默认为...
     * @param  string $encoding
     * @return string
     */
    public static function substr($str, $length, $tailStr = '...', $encoding = null)
    {
        if (empty($encoding)) {
            $encoding = 'UTF-8';
        }
        if (!empty($tailStr) && mb_strlen($str, $encoding) <= $length) {
            $tailStr = '';
        }
        return mb_substr($str, 0, $length, $encoding) . $tailStr;
    }
}
